PostgreSQL pg_dump

1 pg_dump 命令说明:

pg_dump --help

pg_dump可将某个database转储为文本文件或者其他格式文件。
用法:
pg_dump [选项]... [database名]

通用选项:
-f, --file=FILENAME             输出文件名或者目录名
-F, --format=c|d|t|p            输出文件格式(自定义格式、目录格式、TAR包格式、纯文
本)
-j, --jobs=NUM                  使用这多个并行作业进行转储
-v, --verbose                   详细信息模式
-Z, --compress=0-9              压缩格式的压缩级别
--lock-wait-timeout=TIMEOUT     等待表锁超时后操作失败
--no-sync                       不等待变更安全写入磁盘  ➊
--help                          显示此帮助信息并退出
--version                       输出版本信息并退出
控制输出内容的选项:
-a, --data-only                 仅转储数据,而不转储schema
-b, --blobs                     在转储中包含大对象
-B, --no-blobs                  不对大对象进行备份  ➋
-c, --clean                     在重新创建数据库对象之前清除(删除)数据库对象
-C, --create                    包含用于在转储中创建数据库的命令
-E, --encoding=ENCODING         以ENCODING编码格式转储数据
-n, --schema=SCHEMA             仅转储命名schema
-N, --exclude-schema=SCHEMA     不转储命名schema
-o, --oids                      在转储中包含OID
-O, --no-owner                  以纯文本格式跳过对象所有权的恢复
-s, --schema-only               仅转储schema,而不转储数据
-S, --superuser=NAME            要以纯文本格式使用的超级用户名
-t, --table=TABLE               仅转储命名表
-T, --exclude-table=TABLE       不转储命名表
-x, --no-privileges             不转储特权(grant/revoke)
-Z, 0..9                        备份的压缩级别
--binary-upgrade                仅供升级工具使用
--column-inserts                以带有列名的INSERT命令的形式转储数据
--disable-dollar-quoting        禁用美元(符号)引号,而是使用SQL标准引号
--disable-triggers              在仅恢复数据期间禁用触发器
--enable-row-security           启用行级安全控制(只导出用户有权访问的数据)➌
--exclude-table-data=TABLE      不转储命名表中的数据
--if-exists                     删除对象时使用IF EXISTS
--inserts                       以INSERT命令(而非COPY命令)的形式转储数据
--no-publications               不导出逻辑复制发布端数据源定义 ➍
--no-security-labels            不转储安全标签分配
--no-subscriptions              不导出逻辑复制订阅端的数据订阅定义 ➎
--no-synchronized-snapshots     在并行作业中不使用同步快照
--no-tablespaces                不转储表空间分配
--no-unlogged-table-data        不转储不记录WAL日志的表的数据
--quote-all-identifiers         所有标识符加引号,即使不是关键字也加
--section=SECTION               转储命名部分(包括三个部分:pre-data、data以及post
                                -data。data部分包含表记录数据、大对象数据以及序列的
                                值;post-data部分包含索引、触发器、规则和约束(除了
                                验证检查约束)的定义;pre-data部分包含此外其他所有
                                的对象定义)
--serializable-deferrable       等待直至转储正常运行为止
--snapshot=SNAPSHOT             为导出使用指定的快照 ➏
--strict-names                  要求每个表和/或schema包括模式以匹配至少一个实体 ➐
--use-set-session-authorization 使用 SESSION AUTHORIZATION 命令代替ALTER OWNER
                                命令来设置所有权
连接选项:
-d, --dbname=DBNAME             要转储的数据库
-h, --host=主机名               数据库服务器主机或套接字目录
-p, --port=端口号               数据库服务器端口号
-U, --username=名称             作为指定数据库用户连接
-w, --no-password               永远不提示输入密码
-W, --password                  强制要求输入密码(应该自动发生)
--role=ROLENAME                 在转储之前执行SET ROLE命令

环境变量:
PGDATABASE
PGHOST
PGOPTIONS
PGPORT
PGUSER                         
PG_COLOR                       消息的颜色,可为(always,auto,never)

2 pg_dump 示例

  1. 使用自定义格式,包含blob 数据,显示打印信息,压缩备份数据,备份app数据库.
pg_dump  -F c -b -v -c -Z 9 -f app.backup app

2.使用sql 脚本文件. 排除app 数据库中的PUBLIC 模式.且使用标准sql ,插入语句使用全字段.

pg_dump  -F p  -b -v -N public --column-inserts -Ccf app.backup app
  1. 使用目录格式,并发为3 , 包含创建和删除数据库语句.
pg_dump  -F d -j 3 -Ccf app.backup app;
  1. 指定包含 cus1,cus2, schema 数据.
pg_dump  -F d  -b -v -n cus1 -n cus2 -Ccf app.backup app
  1. 使用 目录格式,排除app 数据库中的public 模式.
pg_dump  -F d  -b -v -N public  -Ccf app.backup app
  1. 使用sql 脚本文件输出.
pg_dump  -F p -b -v -Ccf app.backup app;
  1. 不导出权限.
pg_dump  -F d -j 3 -Cxcf app.backup app;
pg_dump  -F d  -b -v -t *.cus* -Ccf app.backup app